home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 051-075 / disk_066 / asm68k / asm68k.doc < prev    next >
Text File  |  1992-05-06  |  52KB  |  1,116 lines

  1.  
  2.             Asm68k    68000 Macro Assembler
  3.                 Version 1.0.1
  4.                     Docs
  5.  
  6.                   Date:  28-Feb-87
  7.  
  8.                    NOTICE:
  9.  
  10.        THIS FILE AND THE PROGRAM IT DESCRIBES ARE COPYRIGHT © 1987,
  11.     W. WESLEY HOWE. ALL RIGHTS RESERVED. A LICENSE FOR USE AND
  12.     DISTRIBUTION WITHOUT PROFIT IS GRANTED TO POSSESSOR OF THIS FILE,
  13.     PROVIDED DISTRIBUTION INCLUDES THE PROGRAM AND THIS FILE. NO
  14.     RIGHT OF ALTERATION OF THE PROGRAM OR DOCUMENTATION IS CONVEYED
  15.     WITH THIS LICENSE.
  16.        NO WARRANTY IS EXPRESSED OR IMPLIED HEREIN ON THE SUITABILITY
  17.     OF THIS PROGRAM FOR ANY PURPOSE AT ALL. YOU MUST RELY ON YOUR OWN
  18.     JUDGEMENT AS TO WHETHER THIS PROGRAM WILL OPERATE PROPERLY WITH
  19.     YOUR COMPUTER FOR WHATEVER PURPOSE YOU MAY DESIRE TO USE IT FOR.
  20.  
  21.                  ADDRESS ALL QUESTIONS, COMMENTS OR CRITICISM TO:
  22.  
  23.                 W. WESLEY HOWE
  24.                    4800 LAKEMONT DR.
  25.                   RALEIGH,  NC  27609
  26.  
  27.                                      -or-
  28.  
  29.                        MyBoard (300/1200) 919-783-5022
  30.                         Available days, late nights &
  31.                     when equipment is not otherwise in use.
  32.  
  33. =============================================================================
  34.  
  35.                 LIMITS:
  36.  
  37.     Source-line length:        255 bytes (including newline)
  38.     Sub-expression length:         40 bytes
  39.     Parenthesis nesting:         16 levels
  40.     Symbol length:             31 bytes
  41.     Macro Size:          8,190 bytes
  42.     Number of Macros:            Available RAM
  43.     Number of Symbols:            Available RAM
  44.     Available RAM:        270,336 bytes maximum heap utilized
  45.     Macro Nesting:              8 levels
  46.     Include Nesting:          8 levels
  47.     Conditional Nesting:         16 levels
  48.     Macro Parameters:         10 per invocation
  49.     Sections:            255 maximum
  50.     Program size:         79,636 bytes (loaded)
  51.     Minimum free heap:     22,938 bytes
  52.     Total RAM necessary:    102,574 bytes
  53.     Constant size:            255 bytes
  54.     Storage size:         65,535 bytes
  55.     Strings:            255 bytes (or line length limit)
  56.     Minimum stack:          8,192 (recommended)
  57.     Operating System:     V. 1.2 Workbench (CLI Only )
  58.  
  59. ==============================================================================
  60.  
  61.    If you are an experienced 68000 Assembly language programmer, you will find
  62. much of this material useful in understanding assembly language programming
  63. on the AMIGA. If you are an experienced AMIGA assembly language programmer,
  64. you may find much of the material boring, and will only want to use this as
  65. a reference document. If you don't know assembly language, then this document
  66. will not teach it, so you may need to buy (What? spend MONEY?) one of a number
  67. of reference books on MC68000 assembly language programming that are available.
  68.    In the following sections, Directives, Commands, Expressions and
  69. Mnemonics are referred to. A Directive or Command is an instruction to
  70. the assembler which causes a specific action to be performed. Some of these
  71. add data to the object file, and some only affect the way assembly operations
  72. are performed. A Mnemonic is the Pseudo-English abbreviation for an in-
  73. struction the assembler is to translate into the appropriate numeric sequence
  74. and include in the object file for the MC68000 processor to perform later,
  75. when your program is run. An expression refers to any sequence of items
  76. consisting of numbers, symbols with a numerical value, and the allowable math
  77. operators which can be reduced to a single number value.
  78.  
  79. ==============================================================================
  80.  
  81.             Math & Logic Operators:
  82.  
  83.      +    Addition
  84.      -    Subtraction or Negation
  85.      ~    Bit-wise NOT
  86.     <<    Bit-wise left shift
  87.     >>    Bit-wise right shift
  88.      &    Bit-wise AND
  89.      |    Bit-wise OR
  90.      !    Bit-wise OR  (for compatability)
  91.      ^    Bit-wise XOR (Exclusive OR)
  92.      /    Integer Division
  93.     %%    Integer Modulo (Remainder)
  94.      *    Integer Multiplication or
  95.         Current Program Counter Location
  96.  
  97.  
  98.    Like the Rotomola assembler, all expressions evaluate in strict Left-to-
  99. Right order, as divided by parentheses. The Unary operators '-' and '~' need
  100. to be offset from any adjacent operators with parentheses. Symbols and
  101. constants may be mixed, and space or tab characters may be included. No
  102. individual portion of the expression may exceed 40 characters (NOTE: a
  103. 'portion' would be any symbol or number alone.)
  104.  
  105. Some examples:        4+(7*2)            Yields  56
  106.             4 + ( 7 * 2 )        Yields  56
  107.             4+7*2            Yields  22
  108.             -4*6            Yields -24
  109.             6*-4            Error
  110.             4(6*7)            Error
  111.             ('A'+1)            Yields  66
  112.             "A" + 1            Yields 194
  113.             'ASDF'+0        Error
  114.  
  115. ===============================================================================
  116.  
  117.             Numbers and Constants:
  118.  
  119.     Binary:        A binary number is either [1] prefixed with the '%'
  120.             (percent) character, or [2] followed immediately with
  121.             the letter 'B' (UPPER or lower case). It may contain
  122.             only the digits '1' or '0'.
  123.     Octal:        An octal number is either [1] prefixed with the '@'
  124.             (at) character, or [2] followed immediately with either
  125.             the letter 'O' or the letter 'Q', in either case.
  126.             Only the digits '0' through '7' are valid.
  127.     Decimal:    A decimal number contains only the digits '0' through
  128.             '9', and may be optionally followed immediately with
  129.             the letter 'D' (either case.)
  130.     Hexa-Decimal:    HexaDecimal numbers contain the digits '0' through '9',
  131.             and the letters 'A' through 'F' (in either UPPER or
  132.             lower case.) They may be [1] prefixed with the '$'
  133.             (Dollar) character, or [2] they must start with a digit
  134.             and be followed immediately with either the letter 'Q'
  135.             or the letter 'X', in either UPPER or lower case. A
  136.             leading '0' may be prefixed for the post-fix form.
  137.  
  138.    Leading zeros do not affect the value of any of the number forms, although
  139. the 40 character limit applies to them also.
  140.  
  141.     Characters:    An INDIVIDUAL ascii character may be included by
  142.             enclosing it in QUOTES. The single quote will yield
  143.             the ascii value, and the double quote will yield the
  144.             ascii value with bit 7 SET (or'd with 128). Multiple
  145.             byte constants are not evaluated in this version.
  146.  
  147. Some Examples:    The number 1,000 (one thousand) may be represented
  148.         any one of the following ways:
  149.  
  150.         1111101000B    01111101000b    %1111101000
  151.         1750Q        01750o        @1750
  152.         1000D        0001000d    1000
  153.         3e8H        03E8h        $3e8
  154.  
  155. ==============================================================================
  156.  
  157.             Assembly Line Format:
  158.  
  159.    An input assembly line follows the following models:
  160.  
  161. Label    Mnemonic    Operand , MoreOperands ;comment
  162.  Label:    Mnemonic    Operand
  163.     Mnemonic    Operand
  164. Label:    Mnemonic
  165. * a comment only
  166.  
  167.    Note that the LABEL either starts in the first column, or is followed by
  168. a colon. The Mnemonic field is separated by at least one space or tab, and
  169. never starts in the first column. Operands, where needed, follow, separated
  170. from the Mnemonic by at least one space or tab. Multiple operands are
  171. separated from each other by a comma (the comma flags the assembler that
  172. there is another operand available.) An asterisk in the first position on the
  173. line indicates a comment only line, or comments may follow complete operands
  174. with a semicolon separator. Assembler directives occupy the Mnemonic position,
  175. and comments are optional. Labels are allowed on all lines, and are required
  176. for some assembler directives.
  177.  
  178. ==============================================================================
  179.  
  180.                 Constants:
  181.  
  182.    The following Assembler directives cause the inclusion of data in the
  183. Object file:
  184.  
  185.     DB    Yields 8-bit values. Either STRINGS, Symbols, Labels, numbers
  186.         or expressions may be evaluated. Multiple operands need to be
  187.         separated by commas, and generate successive bytes up to
  188.         a limit of 255 bytes (the line-length limit should prevent
  189.         this from ever being reached.)
  190.     DW    Yields 16-bit values, in Hi-Lo order. The format is the same
  191.         as the DB directive, except STRINGS will not be evaluated.
  192.         If the address is not a word address, a pad byte will be
  193.         appended to the previous line, and a non-fatal error message
  194.         will be issued.
  195.     DL    Yields 32-Bit values. Otherwise equivalent to DW.
  196.     DC    This directive is the same as DW. Appending .L or .B (in
  197.         either case) will change the function to be the same as
  198.         DL or DB, respectively. (DC.W is legal.)
  199.     ASCII    This command yields a sequence of bytes equivalent to the
  200.         ascii value of the operands (delimited by quotes) provided.
  201.         Single quotes will yield the normal value, and double quotes
  202.         will yield values with bit 7 SET. Within the delimited
  203.         STRING, a '\' (backslash) character, followed by up to three
  204.         decimal digits will cause inclusion of a byte with the same
  205.         numerical value, or if followed by any other character will
  206.         allow the inclusion of that character immediately following.
  207.         (This is useful for including quotes and backslashes in the
  208.         string.) A limit of 255 values applies.
  209.     CSTRING    This command is the same as ASCII, except an additional byte
  210.         with the value 0 is appended (as in the C language.)
  211.     PSTRING    This is the same as ASCII also, except a leading byte with
  212.         a value equal to the number of bytes following is prepended
  213.         (as used in the PASCAL language).
  214.     ISTRING This variant of ASCII will cause the final character to have
  215.         it's most significant bit of the opposite (INVERTED) value
  216.         from the rest of the characters in the string (as defined by
  217.         the delimiting quotes). This form is popular among 8-bit
  218.         machines, and some BASIC interpreters. It's usefulness with
  219.         the new international 8-bit standard ASCII is questionable,
  220.         but it may be helpful, so it hasbeen included anyway.
  221.     DCB    This command accepts the .B .W and .L size specifiers (or
  222.         defaults to WORD.) It generates as many values as the operand
  223.         expression evaluates to (up to 255 bytes total), of the size
  224.         specified. WORD and LONG sizes are forced to an even address
  225.         alignment.
  226.  
  227. ==============================================================================
  228.  
  229.             Symbol and Labels:
  230.  
  231.    A Label is an address designator. It is placed before a mnemonic or a
  232. data location, and acquires a value equal to the relative program counter
  233. value at that location. A standard Label may only be defined this way once
  234. in a program, but may be referenced as many times as needed. It must start
  235. with a letter, a period or the '_' (underscore) character, and may contain
  236. only these characters, or the digits '0' through '9', without spaces up to
  237. a total of 31 characters. When you define a label, it must appear as the
  238. very first item on a line, or you must append a ':' (colon) character to it.
  239. (You may have the colon in the first case also.) You must not use the colon
  240. on the label other than when you define it, or you may get an erroneous
  241. interpretation of your expression.
  242.    A Symbol starts off looking like a label, and follows the same rules, except
  243. the following commands modify it to acquire a new type and value:
  244.  
  245.     EQUATE    Sets a permanent, absolute value equal to the value of the
  246.         expression following this directive. STRING values are not
  247.         allowed.
  248.     SETVAL    Sets an absolute value which is retained until a new value is
  249.         set. You may not later use EQUATE on this label, but you can
  250.         EQUATE a different label to the set value.
  251.     EQUR    Gives a value to the symbol which may later be used in place
  252.         of a standard data or address register. This is valid only
  253.         for D0-D7 or A0-A7 (SP is a synonym for A7). You cannot use
  254.         this value other than to reference a register in a MC68000
  255.         mnemonic.
  256.     REG    Accepts a register-list operand for use with the MOVEM
  257.         mnemonic. A register-list looks like this:
  258.  
  259.             A2-A7/D1/D3-D7
  260.  
  261.         Which defines the registers A2 through A7, D1 and D3 through
  262.         D7. In fact, all the registers except A0, A1, D0 and D2. Only
  263.         the standard address and data registers may be defined in this
  264.         fashion.
  265.     MACRO    Assigns a sequence of input lines, with replacable parameters,
  266.         which will later be substituted for any line which uses this
  267.         symbol as a mnemonic or command. More on Macros later.
  268.  
  269.     These Directives must have a Label in the Label Field for assignment.
  270.  
  271.    You must avoid referencing a symbol before giving it a value, or the 
  272. assembler will complain (sometimes), because the forward reference will make
  273. it type the symbol as a label, which is an address, not a number. Labels, of
  274. course, may be referenced before use, and it's value will be substituted on
  275. the second pass. In fact, this is the only reason you need a two-pass
  276. assembler.
  277.  
  278. =============================================================================
  279.  
  280.             Local (Numeric) Labels:
  281.  
  282.    A line may be labeled with a special Local Label which attaches itself to
  283. a specific offset from the last proper line label, as previously described.
  284. A Local Label is a sequence of up to three decimal digits followed by the
  285. '$' (Dollar) character. Like a regular Label, if it does not start at the
  286. beginning of the line, it must be followed by a colon.
  287.    A Local Label may be referenced in an operand anywhere a line Label would,
  288. but it's scope is only between one regular Label and the next. Each time a
  289. new regular Label is used, the Local Label may then be redefined and reused
  290. with a different value.
  291.  
  292.    An example:
  293.  
  294. Start    Jsr    Initialize_Data
  295. 001$    Jsr    Initialize_Serial
  296.     Move.b    D1,ChangeFlag
  297.     Cmp.b    #0ffh,D1
  298.     Bne    1$
  299.  
  300.    Note that 001$ and 1$ will evaluate to the same location. You need not
  301. start with one and may use any numbers you desire, as long as their value
  302. does not exceed 999. Also, note that $1 and 1$ are interpreted differently;
  303. the first is an absolute expression, and the second is a relative address.
  304. Local Labels may not be used for Macro names, although they may be used
  305. within Macros, and cannot be used to represent Numbers, EXTERNal or ENTRY
  306. types.
  307.  
  308. ==============================================================================
  309.  
  310.            Conditional Assembly Directives:
  311.  
  312.    The following Commands allow assembly to proceed until a matching ENDIF
  313. Directive is found, or disable assembly until the ENDIF is reached if the
  314. condition is not met:
  315.  
  316.     IFEQ    Expression EQuals zero. (e.g. 4-4)
  317.     IFGE    Expression Greater than or Equal to zero. (e.g. 4-4 or 4-3)
  318.     IFGT    Expression Greater Than zero. (e.g. 4-3)
  319.     IFLE    Expression Less than or Equal to zero. (e.g. 4-4 or 4-5)
  320.     IFLT    Expression Less Than zero. (e.g. 4-5)
  321.     IFNE    Expression is Not Equal to zero. (e.g. 4-5 or 4-3)
  322.  
  323.    The above conditionals are evaluated to 32 bits, but the condition decision
  324. is based on their WORD (16-bit) value.
  325.  
  326.     IFD    Label following was already Defined (not just referenced.)
  327.     IFND    Label following has Not yet been Defined.
  328.     IFC    Both STRINGS following Compare (same length and characters.)
  329.     IFNC    Both STRINGS do Not Compare (different length or characters.)
  330.  
  331.    The last two conditional commands need two operands, separated by a comma.
  332. They may be delimited with Quotes (single or double), or by a left bracket
  333. '<' and right bracket '>' pair, or the first string will start at the first
  334. character which is not a space or a tab, and end at the first occurrence of a
  335. comma or space or tab, and the second will start at the next character which
  336. is not a comma or a space or a tab and will end at the first space, tab, semi-
  337. colon or newline character. To enclose spaces in the string, you must use
  338. either the quote or bracket delimiters. To enclose quotes, use the brackets,
  339. and to enclose brackets, use the quotes. Both quotes and brackets cannot be
  340. passed together unless you use the spaces, but then you can't have spaces in
  341. the string. Just shows to go you, everything is a compromise. Any backslash
  342. characters are not expanded before comparison.
  343.    Each Conditional command DO level ends with an ENDIF command. DO levels
  344. nest only to 16 levels, or a fatal error will be generated (whether the
  345. assembly is on or off, each IFxx increases the level count, and each ENDIF
  346. decreases the count; exceeding 16 or going below zero are fatal errors.) DO
  347. levels are not active during a macro definition, but will be evaluated during
  348. a macro expansion.
  349.  
  350. ==============================================================================
  351.  
  352.             Other Assembler Directives:
  353.  
  354.     RESERVE    Creates an uninitialized data storage area, with a size equal
  355.         to the expression following it. The size designators .B .W and
  356.         .L (any case) may be used, or WORD is assumed. The expression
  357.         following the Directive is expanded to the size specifier.
  358.         This is the only Directive which is not limited in size to 255
  359.         bytes for the result, but may yield up to 65,535 bytes.
  360.     ENDSRC    Shuts off assembly for the current DO level. (See the section
  361.         on conditional assembly for DO level explanation.) If you
  362.         are not in a DO level, the source is read to the end of
  363.         file, but no assembly action will occur.
  364.     OPTION    This command accepts the following operands only:
  365.  
  366.              M - Allows macro call lines to print in the
  367.                  assembly listing. (If List is on.) This
  368.                  is the default condition.
  369.             NM - Hides macro call lines, showing expansion
  370.                  lines only.
  371.              L - Turns on listing. (The default condition).
  372.             NL - Shuts off Listing.
  373.  
  374.         (Neither of these commands override the command-line
  375.         switches directly, they only control the flow of data.
  376.         An assembly will still create a list file if not prohibited,
  377.         Option NL will just make it an empty file. If the list
  378.         file was disabled on the command line, Option L will
  379.         not send the listing anywhere. None of the operands are
  380.         case-sensitive.)
  381.     TITLE    Accepts a STRING (delimited by quotes) which will label all
  382.         pages, if paging is not disabled. The Maximum title length
  383.         is 40 characters. Also cause pages to be numbered.
  384.     ORIGIN    Sets the program counter to the value of the expression
  385.         following the command. Origin remains relative on AMIGA
  386.         output format.
  387.     PAGEUP    Causes a page to end if paging is not disabled. A form-feed
  388.         character is sent, and a page heading with the optional
  389.         title (see TITLE) is printed.
  390.     SECTION    this command causes a new section, or Hunk, to be created
  391.         in the AMIGA output format. The first operand must be a
  392.         name containing no spaces and having less than 40 total
  393.         characters. The second operand, if given, should be
  394.         separated by a comma and should be either CODE, TEXT,
  395.         DATA or BSS. If none is given, CODE is assumed. (only the
  396.         first character is checked, however, so DUMMY will yield a
  397.         DATA section definition.) TEXT is equivalent to CODE. Case is
  398.         not significant on the section type, but case is important for
  399.         the name. If the section name has been used before, assembly
  400.         will proceed at the next location as was previously defined,
  401.         and the resultant code, data or storage space will be coalesced
  402.         into one Hunk. See the AmigaDOS manual for more information
  403.         on Hunks.
  404.     IDENTIFY   This command should be followed with a name, which will
  405.         be given to the program unit (a program unit is a hunk or a
  406.         collection of hunks to be fed to the linker.) Only the first
  407.         name given will be used, subsequent uses are ignored. If the
  408.         IDENTIFY command is not used during an assembly, the object
  409.         file will be given a name that has 0 characters in it. (Null
  410.         string.)
  411.     EXTERN    Followed by one or more Labels or symbols (separated by commas.)
  412.         These labels must not be defined within the  entire assembly
  413.         source, and cause the assembler to generate the appropriate
  414.         external reference instructions in the object file (AMIGA
  415.         format only) for resolution by the linker.
  416.     ENTRY    Followed by one or more Labels or Symbols. These labels, which
  417.         need to be defined somewhere, allow locations within the
  418.         program unit to be visible to the linker to resolve other
  419.         program unit EXTERNal references. A program that consists of
  420.         more than one object file will need to have an ENTRY in one
  421.         unit for every EXTERN in the other units, or the program will
  422.         'BOMB' and probably either lock-up the machine or cause the
  423.         dreaded GURU to appear. References between different sections
  424.         must be to ENTRY labels, since the AMIGA loader will place
  425.         each section wherever it will fit, and resolve all these
  426.         different addresses. If you never use the section command,
  427.         the entire program will have to fit in the same place, and
  428.         might not be able to be loaded if there is not a spot big
  429.         enough for the whole thing (depending on how many tasks might
  430.         also be running, etc.)
  431.     EXECUTE    This command will pass the quote delimited string following
  432.         it to AmigaDOS during the second pass. The current window
  433.         is the input and output. A more detailed description of the
  434.         Execute routine is located in the AmigaDOS manual, but
  435.         basically the same things you can do from the CLI may be
  436.         contained within the string and executed from within the
  437.         assembler. The Source, Object and any open Include files
  438.         will be locked, and cannot be accessed at this time. No
  439.         use is made of the return value from the program called.
  440.         This is your hook, let me have some ideas for any uses
  441.         for it (hint: the Macro functions allow some very powerful
  442.         uses, and any valid AmigaDOS device may be used for Source,
  443.         Include and Object file-handles.)
  444.     CNOP    This Directive causes null filler bytes to be inserted
  445.         into the object file until the desired alignment is
  446.         reached. There may be one or two values after the Directive,
  447.         separated a comma. The second value given, or the single value
  448.         is the desired alignment value you want, and the first value
  449.         when two values are given is how many more bytes to add beyond
  450.         this point. There may not be more than 255 bytes generated in
  451.         total to acheive the desired alignment, and no restrictions are
  452.         imposed on what alignment values can be used, but values that
  453.         are not powers of two will normally not generate a correct
  454.         alignment. If you want to set the Program Counter 2 bytes
  455.         beyond the next PC location evenly divisible by 8 use the
  456.         command like this:
  457.  
  458.             CNOP    2,8
  459.  
  460.         The predominant reason for using this command would be to
  461.         align data at specific offsets, and to create data structures
  462.         in specific formats.
  463.  
  464. ===============================================================================
  465.  
  466.             Include Files:
  467.  
  468.    Up to 8 levels of include files may be inserted into the assembly with the
  469. INCLUDE Directive. The syntax demands a Filename or Path, delimited by quotes.
  470. Include file directory searches are supported by command-line parameters (De-
  471. tailed in another section.) Include files may be called by Macros, and Macros
  472. may be used by Include files, up to their respective nesting levels (8 each.)
  473. The INCLUDE directive will cause the next source line to be read from the
  474. named file as if the entire contents appeared in the original source file,
  475. except line numbering will start at one again, and the line number will be
  476. followed by a '+' (plus) sign. When the end of the Include file is reached,
  477. the line number will revert to the one following the line which invoked the
  478. INCLUDE Command.
  479.    Special provisions have been made to allow automatic and command-line
  480. inclusion of header and/or macro definition files before assembly starts,
  481. and these files do not count in the nesting level limits for Include files.
  482. A later section will describe command-line parameters and the configuration
  483. file.
  484.  
  485. A SPECIAL NOTE: Several of the existing include files from Commodore do not
  486.         Assemble correctly (particularly those in the exec directory.)
  487.         Many of the source lines in these files contain comments
  488.         which are delimited only by spaces and an asterisk. Asm68k
  489.         is not restrictive about spaces within an expression, and
  490.         tries to assemble the asterisk as a multiplication operator
  491.         with the words in the comment being looked at as labels, and
  492.         gives appropriate error messages. Make sure the comments are
  493.         stripped or delimited by a semi-colon. A few of the files
  494.         contain Macro error checks using an IFC \1,'' which will not
  495.         assemble correctly with Asm68k. Use IFEQ NARG instead. the
  496.         FUNCDEF file contains an expression 4*-6, which will not be
  497.         interpreted correctly as written. Change this one to 4*(-6).
  498.         These changes will make both assemblers happy, and the include
  499.         files more portable between applications.
  500.  
  501. ===============================================================================
  502.  
  503.              Macros:    
  504.  
  505.    The best feature of the assembler, and the hardest one to master, is the
  506. use of the MACRO command. A Macro is simply a sequence of source lines which
  507. may be saved and inserted as often as wanted just by using the name you gave
  508. it as a command. A Macro may contain any of the other Directives and Mnemonics
  509. the assembler recognizes except another MACRO definition command, although
  510. you may use the name of a defined Macro in your Macro (up to 8 levels deep.)
  511.    A Macro is defined (and it must be before being used) by placing the
  512. MACRO in the Mnemonic Field, either before or after it's name. The name for
  513. the Macro must follow the rules for Labels if it is on the left side, or if
  514. it is on the right side it needs to be separated by at least one space or
  515. tab from the MACRO Directive, and follow all the Label rules except it does
  516. not need to be followed by a colon. All the subsequent lines up to the one
  517. which contains the ENDMAC command will be saved for subsequent use.
  518.    The real power of Macros comes from their use with replacable parameters.
  519. When you issue a Macro name as a Command, up to ten parameters (numbered
  520. from one to nine, with zero for ten) may be included in a comma, space or
  521. bracket separated list after the name for use within the Macro text. To make
  522. these parameters appear in the Macro expansion, place a '\' (backslash)
  523. character followed immediately (no spaces) with the digit of the parameter you
  524. want in the definition. When the macro is expanded, the text will include the
  525. parameter placed on the calling line, and will be evaluated just as if the
  526. source had included it as it appears. The parameters are gathered under the
  527. same rules as the IFC and IFNC commands (bracket, quote or space delimiters.)
  528.    The backslash character may be passed to the Macro by including two
  529. backslashes in the calling line, and any non-numeric character following
  530. a backslash other than a backslash will pass both the backslash and the
  531. character following it to the Macro.
  532.    Conditional Directives are effective within the Macro, under the same rules
  533. as they follow elsewhere. If assembly is enabled, and the Directive MEXIT is
  534. encountered, expansion of the Macro is suspended, and the next source line
  535. will be the one following the Macro invocation line, after the assembler has
  536. examined the remaining Macro text and resolved all the IFxx and ENDIF levels.
  537.    To make Macros respond differently with different numbers of passed para-
  538. meters, the special symbol NARG (not case-sensitive) has been reserved. It will
  539. yield a value equal to the number of parameters found on the invocation line
  540. within a Macro expansion, and zero elsewhere.
  541.    One additional feature within Macros is the \@ (backslash followed by the
  542. at character). While the Macro is being expanded, this combination is changed
  543. to a period followed by three decimal digits. These digits increment starting
  544. from zero every other time the \@ combination is expanded. This allows pairs
  545. of unique symbol names to be generated within the Macro text, allowing branch
  546. instructions to occur. Local (numeric) Labels are effective within the Macro,
  547. but they do not attach to the Macro name, nor are they canceled by the Macro
  548. invocation (unless the invocation line was labeled.)
  549.  
  550. ==============================================================================
  551.  
  552.             Do Nothing Directives:
  553.  
  554.    The following directives are accepted by the assembler, but cause no action
  555. and generate no code, just as if they were comments. They have been included
  556. to allow use of source code written for other assemblers.
  557.  
  558.     MASK2        FORMAT        SPC        
  559.     NOL        OFFSET
  560.  
  561.  
  562.             Synonym Directives:
  563.  
  564.    The directives in the left column are substitute names for the directives
  565. in the right column, and were included for source compatability:
  566.  
  567.         DS        RESERVE
  568.         END        ENDSRC
  569.         EQU        EQUATE
  570.         SET        SETVAL
  571.         TTL        TITLE
  572.         ENDC        ENDIF
  573.         ENDM        ENDMAC
  574.         RORG        ORIGIN
  575.         XDEF        EXTERN
  576.         XREF        ENTRY
  577.         RORIGIN        ORIGIN
  578.  
  579. ===============================================================================
  580.  
  581.             Unimplemented Directives:
  582.  
  583.    The following Directives, found in some other assemblers, have not been
  584. implemented in this version:
  585.  
  586.     IDNT        FAIL        LIST
  587.     LLEN        PAGE        PLEN
  588.     NOOBJ        NOLIST        NOPAGE
  589.  
  590.    A startup Macro file has been included with this package to allow some
  591. compatability if these are needed.
  592.  
  593. ===============================================================================
  594.  
  595.             Startup Configuration:
  596.  
  597.    If a file named Asm68k.cnf (or with a filename the same as the assembler
  598. with the extension .cnf) is found in the same directory spec the assembler was
  599. called from, it is read and acted on. The current version only looks for two
  600. items in this file, the pagelength (which must be greater than 11) and the
  601. name (and path) of the startup file. The format is:
  602.  
  603.     Page Length:    1 byte (11-255), binary
  604.     File Path:    up to 31 bytes, ascii
  605.     Terminator:    1 byte, binary, value 0
  606.  
  607.    Any remaining characters after the null byte are ignored. The assembler
  608. next looks for the filename or path given, and if this file is found, it
  609. is read and assembled as if it was the beginning of the Source file. All
  610. lines from this file are numbered 0, and no warning or error occurs if the
  611. file is not found (unless, of course, you were depending on these definitions
  612. in your program, then you could have lots of error messages.)
  613.    Beware when building this file that the null character must be at the end of
  614. the pathname or you may crash the system. You can create a file from the
  615. keyboard using the command:
  616.  
  617.         COPY con: to Asm68k.cnf
  618.  
  619. then typing a character for the pagelength (B is 66, the standard), following
  620. it with the pathname for the startup file, followed with a control@ (CTRL key
  621. and 2 key together), then ending it with a control\ (CTRL and \ keys together.)
  622. If you make a mistake, you cannot edit the file, so do the control\ and start
  623. over.
  624.  
  625. ===============================================================================
  626.  
  627.             Invoking the Assembler:
  628.  
  629.    The assembler is only designed to be run from the CLI interface. If you
  630. don't know how to find the CLI interface, read the manuals that came with
  631. the machine before trying to use this program.
  632.    The minimum invocation must be the program name (Asm68k) followed with a
  633. source filename (separated by at least one space from the program name.)
  634. This will yield an assembly, with an object file output in the AMIGA format,
  635. and a listing file. The filenames for these files will be created by
  636. stripping any extension (period followed by characters) from the source
  637. filename and appending .o for the object filename and .lst for the listing
  638. filename. Any error messages will list to the screen.
  639.  
  640.    Example:
  641.  
  642.         Asm68k MyProgram.a
  643.  
  644.    Outputs:
  645.  
  646.         MyProgram.o    (The relocatable binary object file)
  647.         MyProgram.lst    (A combined source and hex object file)
  648.  
  649.    If this isn't what you want, a wide variety of "switches" are supported
  650. to control the usage of the assembler, and the descriptions follow:
  651.    (A switch is a parameter you type after the program name and source
  652. filename, with an intervening space. These switches all start with the
  653. minus sign '-' and may be followed immediately by a letter or letters as
  654. shown below.)
  655.  
  656.     -O    Causes the OBJECT file to be generated (this is a default
  657.         value.) It may be followed immediately with a filename
  658.         containing no spaces, or type a space and then enclose the
  659.         filename in double quotes if it contains spaces. You may also
  660.         use the intervening space without quotes on a filename without
  661.         spaces if you like. A given object filename will be used
  662.         instead of the default filename normally used.
  663.     -L    Causes the LISTING file to be generated (also a default.) The
  664.         usage is just like the -O switch.
  665.     -E    Causes ERROR messages to list to the named file. Use like
  666.         above. On this switch, if no filename is given, a default
  667.         filename will be formed like the object and listing names,
  668.         using the extension .err
  669.     -V    VERIFICATION file. Another name for the -E switch.
  670.     -H    HEADER file. Causes a search for the filename given after the
  671.         switch (as above) which will be read as a source file before
  672.         the source file is read (but after the initialization file, if
  673.         enabled.) Just like the initialization file, if the file is not
  674.         found, no warning or error is issued directly. All the source
  675.         from this file will also be numbered as line 0.
  676.     -I    An INCLUDE directory search path list should follow this switch
  677.         and should contain directory names (no spaces allowed) separated
  678.         from each other with plus signs '+', commas or spaces. If
  679.         spaces are used, then you must space the list off from the
  680.         switch and enclose the entire list in double quotes. Use of
  681.         this switch will cause the assembler to search for an INCLUDE
  682.         file in each of the named directories if it is not found in
  683.         the current one.
  684.     -X    This switch should be followed immediately with up to 6
  685.         characters, and will cause the default object filename to be
  686.         formed by stripping the extension and appending a period and
  687.         the characters following the X.
  688.     -C    This switch has been included for compatability. It should
  689.         be followed with only the following characters, as many as
  690.         wanted, with no spaces:
  691.             S    Generates a symbol table at the end of the
  692.                 list file (this is a default value.)
  693.             D    Does nothing.
  694.             C    Causes Case of all Labels and symbols to
  695.                 be ignored. With this switch activated,
  696.                 LABEL, Label and label will all be interpreted
  697.                 as the same name. This is not the default.
  698.             X    Does nothing.
  699.     -N    This switch turns things off (NO.) Like -C, you should follow
  700.         it with a series of letters from the following list, without
  701.         any spaces:
  702.             S    Turns off the SYMBOL table normally produced
  703.                 at the end of the listing file.
  704.             L    Stops the LISTING file from being generated.
  705.             E    Inhibits the ERROR file, if you turned it on.
  706.             V    A synonym for the E switch above.
  707.             P    Inhibits the PAGINATION of the listing file.
  708.             O    Inhibits the OBJECT file generation.
  709.             Q    Inhibits the conversion of mnemonics to QUICK
  710.                 form. The default is to convert allowable
  711.                 values of ADD and SUB to the quick form if it
  712.                 is safe (values already defined.)
  713.             X    Keeps the assembler from stripping the eXten-
  714.                 sion from the source filename when forming
  715.                 default filenames.
  716.             R    Causes the assembler to generate the object
  717.                 code in a non-RELATIVE format. The format
  718.                 used is the Intel format, and the program
  719.                 counter is only output to 16-bits of
  720.                 significance. No symbol or relocation infor-
  721.                 mation is output, and no linker or loader
  722.                 is available to operate on this format.
  723.     >    The right bracket, followed immediately with a filename, will
  724.         cause the signon, progress and all error messages to be
  725.         diverted by AmigaDOS to the named file when it is the first
  726.         parameter after the program name. If it is not the first,
  727.         the assembler will send the error messages to the named file.
  728.  
  729.    All the above switches may be used in either UPPER or lower case, and will
  730. generate the same results. The source filename should be the first parameter
  731. after the program name, but only to avoid confusion. It must be the only
  732. parameter not associated with a switch, and may not be given twice. The source
  733. filename is the only mandantory command-line parameter.
  734.  
  735. ==============================================================================
  736.  
  737.             Other notes on use:
  738.  
  739.    Case is normally significant on Symbols, Labels and Macro names unless the
  740. -CC switch is used. The Directives, Mnemonics and special symbols will be
  741. recognized in any mixture of UPPER and lower case.
  742.    The only truly reserved symbols are the following:
  743.  
  744.         NARG    MACRO    ENDMAC    ENDM    A0
  745.         A1    A2    A3    A4    A5
  746.         A6    A7    D0    D1    D2
  747.         D3    D4    D5    D6    D7
  748.         SP    CCR    USP    SR    PC
  749.  
  750.    All the other special Symbols, Mnemonics and Directive names  may be defined
  751. and used as Labels, or may be implemented as Macros, but be careful when doing
  752. this to avoid circular references, which will not be detected until the Macro
  753. nesting level is exceeded, or a write error results from the disk being full.
  754.    For example, if you redefine JSR as a Macro, and want to use it in the
  755. Macro definition, don't call the assembler with the -CC switch, and be sure
  756. to use a different case within the Macro text to get the assembler to recog-
  757. nize the Mnemonic, which is case-insensitive, from the Macro name. This allows
  758. the maximum flexibility for the assembler, with only a minimum of care from
  759. the programmer.
  760.  
  761. ==============================================================================
  762.  
  763.             Error Messages:
  764.  
  765.    The assembler uses as much logic as possible to generate a line of code
  766. in spite of erroneous input. If a reliable evaluation can be made, a source
  767. line will be interpreted regardless of errors, however some of these lines
  768. may not be what you meant. Even the little bit of DWIM in this assembler
  769. occupies a lot of code space. Because assembly of erroneous lines is attempted
  770. where possible, you may find multiple error messages referring to the same
  771. line. The listing file will only contain the first error detected, however the
  772. screen list or error file will also list the errors in the order they were
  773. detected. Some errors may generate errors later, especially if typing errors
  774. cause the assembler to find an item it thinks is an undefined symbol in an
  775. expression, and you later used this symbol for another purpose. The following
  776. is a list of error messages, and explanations:
  777.  
  778.       1: Error in Expression Value
  779.         The expression being evaluated contained some garbage.
  780.       2: Duplicate Line Label
  781.         An attempt at defining a Label twice was detected.
  782.       3: Undefined Label in Expression
  783.         The symbol or label used in the expression was not defined
  784.         anywhere in the source file.
  785.       4: Syntax Error
  786.         The assembler could make no sense of what you were trying to
  787.         tell it to do.
  788.       5: Operand Too Large
  789.         The operand was greater than the value allowed for the
  790.         operation being performed.
  791.       6: Invalid Register Specified
  792.         The register called for in the current operation and what
  793.         was found are not compatable.
  794.       7: Undefined Mnemonic or Command
  795.         An item in the Mnemonic field is not a defined Macro or
  796.         valid mnemonic or directive. May also be caused by using
  797.         a label outside of column one without a colon following it.
  798.       8: Improper use of Unary Operator
  799.         A Unary operator ('-' or '~') was found right after another
  800.         math operator. The expression evaluator cannot handle this,
  801.         so it is ignored and this message is output.
  802.       9: Operation Involves Division by Zero
  803.         A Division or Modulo operation was attempted where the right
  804.         hand value was zero or undefined. The result of this operation
  805.         is set to zero.
  806.      10: Too Many Right Parentheses
  807.         More right parentheses were found than left parentheses.
  808.      11: Missing Right Parenthesis
  809.         More left parentheses were used than right parentheses.
  810.      12: Too Many Parenthesis Levels
  811.         More than 16 levels of parentheses were attempted to
  812.         be opened.
  813.      13: Invalid Character in Expression
  814.         A character was found in the expression that is not
  815.         any of the defined mathops, numbers, symbol characters
  816.         or newline characters.
  817.      14: Closing Quote for Character Constant Absent
  818.         No closing quote on a single character constant was found.
  819.         Also caused by attempts to define multiple-character
  820.         constants in an expression.
  821.      15: Operand Field Missing
  822.         An operand was needed, and was not there.
  823.      16: Bit Operand Required
  824.         The expression needs a bit operand, and what was found was
  825.         not of the required type.
  826.      17: Invalid Bit Specified
  827.         The data found cannot be used legally to specify a bit.
  828.      18: Immediate (#) Operand Needed
  829.         The data given was not preceded by the '#' (pound) sign,
  830.         and needed to be.
  831.      19: Branch or Jump Out-of-Range
  832.         The address evaluated is outside of the range allowable for
  833.         the branch of jump mnemonic specified.
  834.       ** Run from CLI Interface **
  835.         The message output when no command-line was used (as from
  836.         the workbench. A Fatal error.
  837.       ** Command Line Required **
  838.         The message output when no arguments are present on the
  839.         command-line (you need at least the source filename.)
  840.         Also a Fatal error.
  841.       ** Unrecognized Switch **
  842.         A switch or a character within a switch was not one of
  843.         the valid switches. Not a Fatal error.
  844.       ** File Write Error **
  845.         An error occurred during a file write, as reported from
  846.         AmigaDOS. A Fatal error. May be caused by a full disk.
  847.       ** Source Filename Missing **
  848.         The source filename was not present or was corrupt or was
  849.         given twice. A Fatal error.
  850.       ** Parameter Too Long **
  851.         An Item on the command-line was too long to be evaluated.
  852.         Also Fatal.
  853.       ** Insufficient Free Memory **
  854.         This error occurs when the memory pool does not contain
  855.         enough memory in a size large enough for the request
  856.         from the assembler to be filled. Execution stops
  857.         immediately.
  858.       ** Include Files nested too deep **
  859.         This error occurs when you try to open the ninth Include
  860.         file before closing one.
  861.       ** Couldn't open Source file **
  862.         AmigaDOS did not return information indicating that the source
  863.         file was ready to be read from (or it isn't there.) No
  864.         assembly will take place without a source file.
  865.       ** Error Closing Source file **
  866.         Another error was reported when the source file was being 
  867.         closed.
  868.       ** Couldn't open Object file **
  869.         A Dos error occurred trying to open the object file.
  870.       ** Couldn't open Listing file **
  871.         Same error from listing file open attempt.
  872.       ** Couldn't open Error listing file **
  873.         Like above, but on error file attempt.
  874.       ** ENDMAC Command missing **
  875.         The end of the source file was reached, and the assembler
  876.         was still saving a macro definition.
  877.      34: Too Many Parameters present
  878.         More parameters than the assembler has space to store
  879.         were found.
  880.      35: Parameter Too Long
  881.         An item in an expression or an operand was longer than the
  882.         defined limit.
  883.      36: Closing Single-Quote Missing
  884.         A string definition should be bounded on both ends with
  885.         matching quotes.
  886.      37: No Label on Line
  887.         No label was present for the Directive to act upon.
  888.      38: Macro called using Symbol label
  889.         A symbol name found in the mnemonic field was attempted
  890.         to be used as a Macro, and was found to be a Label.
  891.       ** Too many nested Macros **
  892.         This Fatal error occurs when the ninth Macro call is
  893.         issued before any of the previous Macro calls have ended.
  894.      40: Macro redefinition Error
  895.         The name used with the MACRO command is already the name
  896.         of a previously defined Macro.
  897.      41: ENDMAC command without MACRO definition
  898.         You didn't use the MACRO command to define your Macro, or
  899.         you issued the ENDMAC command twice. If you are attempting
  900.         to get two or more exit points from a macro, use the
  901.         MEXIT Directive.
  902.       ** INCLUDE file unable to be opened **
  903.         This Error occurs when the filename associated with the
  904.         INCLUDE command was not found after the include directory
  905.         list was exhausted.
  906.       ** Source or Include file line too long **
  907.         An input line read from disk contained more than 255
  908.         characters in a row without a carriage return or
  909.         linefeed.
  910.      44: Insufficient Macro parameters supplied
  911.         An expansion was attempted and there were not enough
  912.         parameters on the Macro call line.
  913.      45: Label Value changed between passes
  914.         This unusual error occurs when the value of a Line Label
  915.         is different on the second pass than it was on the first
  916.         pass. The whole assembly file is probably corrupt, and
  917.         it is likely that the message will repeat with every
  918.         subsequent Line Label found. Forward references and
  919.         absolute references to SETVAL Labels, or conditional
  920.         compilation based on SETVAL Labels are the likely
  921.         culprits behind this error.
  922.      46: Invalid Label - Item was Forward Referenced
  923.         A Label which was referenced before it was used was later
  924.         found in a context other than usage as a relative
  925.         location.
  926.      47: Local Definition of External Symbol not allowed
  927.         If you declared a Symbol to be EXTERNal, you cannot define
  928.         it within the current assembly. Use the ENTRY Directive
  929.         instead if this is what you want.
  930.      48: Unavailable Addressing Mode Used
  931.         The addressing mode used for the Mnemonic on this
  932.         line is not one which is allowable for that
  933.         Mnemonic.
  934.      49: Invalid Item in External Reference Expression
  935.         An external reference included an item which did not
  936.         belong there. This also occurs on an attempt to
  937.         generate PC relative references to external addresses.
  938.       ** Too Many Section Definitions (Limit = 255) **
  939.         The message is self-explanatory.
  940.      51: Invalid Section Type - Section CODE used
  941.         An item found after the section name was not one of the
  942.         three valid section types - CODE, DATA or BSS. The
  943.         type was set to CODE.
  944.      52: Instruction Alignment Error - Pad Byte Added
  945.         All the 68000 Mnemonics and WORD and LONG oriented
  946.         Directives need to be aligned on an even address. The
  947.         Assembler attempts to correct this by adding a null
  948.         byte to the previous instruction, and adjust the
  949.         Program Counter and Label values accordingly.
  950.       ** Too Many Conditional Levels Attempted
  951.         The seventeenth conditional Directive was found before an
  952.         ENDIF Directive was.
  953.       ** Conditional End without Conditional Statement
  954.         There are more ENDIF commands than matching conditional
  955.         Directives.
  956.      55: Relative Reference Outside of Current Section
  957.         An attempt to use a PC relative mode to a Line Label that
  958.         was not declared as an ENTRY label was attempted. Also
  959.         occurs on Data references to other sections without
  960.         using the ENTRY type-definition.
  961.      56: Executable Code not allowed in Data & Bss Sections
  962.         DATA sections may contain only initialized and uninitialized
  963.         data locations, and BSS sections may contain only un-
  964.         initialized (RESERVE) data.
  965.      57: Redefinition of Equate Label not Allowed
  966.         You cannot change the value of a Label that has been EQUATEd.
  967.      58: Equate to previously SET Label Disallowed
  968.         A Label that was set cannot later be upgraded to an equate
  969.         in the same assembly. The assembler handles decisions on
  970.         equated labels, whose value cannot change, differently
  971.         than set labels, whose value may be redefined. Since the
  972.         length of 68000 instructions vary with the address mode,
  973.         a set label is always treated as a LONG value (unless
  974.         otherwise specified) and an equated label is treated
  975.         for the value it contains. Since the assembler always
  976.         attempts to use the shortest instruction length possible,
  977.         a change in the type of a label can cause bad code to be
  978.         generated.
  979.  
  980. ===============================================================================
  981.  
  982.             Addressing Modes:
  983.  
  984.    The following models show the valid address modes for the 68000 processor
  985. as they are recognized by the assembler:
  986.     ( 'n' represents a digit from 0 to 7, X represents either 'D' or 'A'
  987.       for an address mode 'ALabel' represents a symbol with an absolute
  988.       or an external value, 'RLabel' represents a Line Label or an
  989.       ENTRY typed label, 'number' refers to an actual numerical value, and
  990.       the other items are what they are. Case is not significant except on
  991.       Label and Symbol Names. Defined REG Labels of the proper type may be
  992.       used in place of the register names.)
  993.  
  994. IMMEDIATE:            #number        #ALabel
  995.  
  996. DATA REGISTER DIRECT:        Dn
  997.  
  998. ADDRESS REGISTER DIRECT:    An    SP
  999.  
  1000. ADDRESS REGISTER INDIRECT:    (An)    (SP)
  1001.  
  1002. ADDRESS REGISTER INDIRECT WITH POST INCREMENT:        (An)+    (SP)+
  1003.  
  1004. ADDRESS REGISTER INDIRECT WITH PREDECREMENT:        -(An)    -(SP)
  1005.  
  1006. ADDRESS REGISTER INDIRECT WITH DISPLACEMENT:        number(An)
  1007.                             number(SP)
  1008.                             ALabel(An)
  1009.                             ALabel(SP)
  1010.  
  1011. ADDRESS REGISTER INDIRECT WITH DISPLACEMENT AND INDEX:    number(An,Xn)
  1012.                             Alabel(An, Xn)
  1013.                             number(SP, Xn)
  1014.                             ALabel(SP,Xn)
  1015.  
  1016. PROGRAM COUNTER RELATIVE WITH DISPLACEMENT:        RLabel
  1017.                             RLabel(PC)
  1018.                             number(PC)
  1019.  
  1020. PROGRAM COUNTER RELATIVE WITH DISPLACEMENT AND INDEX:    RLabel(Xn)
  1021.                             RLabel(PC, Xn)
  1022.                             number(PC, Xn)
  1023.  
  1024. SHORT ABSOLUTE:        ALabel        number
  1025.  
  1026. (where the value is less than $007FFF or greater than $FF8000)
  1027.  
  1028. LONG ABSOLUTE:        RLabel (to another section)
  1029.             ALabel        number
  1030.  
  1031. (where the value doesn't qualify for short mode)
  1032.  
  1033. SPECIAL:        USP        CCR        SR
  1034.  
  1035.  
  1036. ===============================================================================
  1037.  
  1038.             Release History:
  1039.  
  1040.    Version 1.0.1 Alpha1.........released 02-Jan-87.
  1041.    Version 1.0.1 Beta1..........released 11-Jan-87.
  1042.     Changes:    1. EQUATEd & SETVAL Labels now use their full
  1043.                32-bit value in expressions.
  1044.             2. External 16-bit references are now handled
  1045.                correctly (for those open-library calls.)
  1046.             3. Macro Parameters now parse correctly when
  1047.                separated by commas.
  1048.             4. The REG and EQUR functions were swapped.
  1049.    Version 1.0.1 Beta2..........released 20-Jan-87.
  1050.     Changes:    1. Conditional levels were increased to 16.
  1051.             2. The include directory spec switch was changed
  1052.                to handle logical assignments correctly (e.g.
  1053.                INCLUDE: now works.)
  1054.             3. DBcc and Bcc branches to an ENTRY Label no
  1055.                longer generate an error.
  1056.             4. IFD and IFND did not function properly with
  1057.                SET or EQUATED Labels.
  1058.             5. The assembler now passes external reference
  1059.                information for the linker on EXTERN items
  1060.                used as immediate operands.
  1061.             6. Several heavily used routines were rewritten
  1062.                in assembly language and assembled with this
  1063.                program.
  1064.    Version 1.0.1................released 28-Feb-87.
  1065.     Changes:    1. Use of the MOVE mnemonic with PC relative references
  1066.                is no longer allowed. Formerly, the assembler
  1067.                generated code for these instructions, but since
  1068.                they are not legal 68000 opcodes, it would not run.
  1069.             2. The LINK instruction with an offset of zero no
  1070.                longer generates an error message. Positive offsets
  1071.                still generate an error message, but are assembled.
  1072.             3. The CNOP directive now works as described. Page
  1073.                boundaries may be referenced by using an alignment
  1074.                offset of exactly 0 (with no add number.)
  1075.             4. Bcc (conditional branch + BRA) mnemonics may now
  1076.                use .B in place of .S and .W in place of .L, for
  1077.                compatibility with other assemblers for other
  1078.                computers.
  1079.             5. The configuration file is now looked for by adding
  1080.                the .cnf extension to the file or path name used
  1081.                to invoke the assembler. This will make the use
  1082.                of the assembler in a batch operation or with
  1083.                logical assignments easier.
  1084.             6. The old Control-C handler has been replaced with
  1085.                one that returns allocated heap space to the
  1086.                system.
  1087.             7. TEXT has been added as a synonym for CODE for
  1088.                compatibility with other conventions and operating
  1089.                systems.
  1090.             8. The numerically sorted portion of the symbol table
  1091.                dump no longer masks the high 8 bits of EQUATEd and
  1092.                SET labels. Values are sorted using signed 32-bit
  1093.                arithmetic.
  1094.             9. The size of the assembler has been significantly
  1095.                reduced.
  1096.  
  1097. ===============================================================================
  1098.  
  1099.    A special note of gratitude to various members of ASDF (Amiga Software
  1100. Developers Forum), The Software Distillery (whose BLink reduced the many
  1101. hours spent relinking the source files during development), and especially
  1102. John Toebes, whose offhand remarks unknowingly provided much of the inspiration
  1103. to keep going.
  1104.  
  1105. ===============================================================================
  1106.  
  1107. NOTE:    Amiga and AmigaDOS are trademarks of Commodore Business Machines.
  1108.     Intel is a trademark of the Intel Co.
  1109.     MC68000 is a trademark of Motorola Co.
  1110.  
  1111. ===============================================================================
  1112.  
  1113.             <*|=|*>  THE END  <*|=|*>
  1114.  
  1115. ==============================================================================
  1116.